Trò chơi Tic-Tac-Toe, game đánh caro full source code
53.578 lượt xem;
- RPGMovement.cs
- Scripts /
- DemoRPGMovement /
- Demos /
- Photon Unity Networking /
- Assets /
- project /
1 using UnityEngine;
2 using System.Collections;
3
4 [RequireComponent( typeof( CharacterController ) )]
5 public class RPGMovement : MonoBehaviour
6 {
7 public float ForwardSpeed;
8 public float BackwardSpeed;
9 public float StrafeSpeed;
10 public float RotateSpeed;
11
12 CharacterController m_CharacterController;
13 Vector3 m_LastPosition;
14 Animator m_Animator;
15 PhotonView m_PhotonView;
16 PhotonTransformView m_TransformView;
17
18 float m_AnimatorSpeed;
19 Vector3 m_CurrentMovement;
20 float m_CurrentTurnSpeed;
21
22 void Start()
23 {
24 m_CharacterController = GetComponent<CharacterController>();
25 m_Animator = GetComponent<Animator>();
26 m_PhotonView = GetComponent<PhotonView>();
27 m_TransformView = GetComponent<PhotonTransformView>();
28 }
29
30 void Update()
31 {
32 if( m_PhotonView.isMine == true )
33 {
34 ResetSpeedValues();
35
36 UpdateRotateMovement();
37
38 UpdateForwardMovement();
39 UpdateBackwardMovement();
40 UpdateStrafeMovement();
41
42 MoveCharacterController();
43 ApplyGravityToCharacterController();
44
45 ApplySynchronizedValues();
46 }
47
48 UpdateAnimation();
49 }
50
51 void UpdateAnimation()
52 {
53 Vector3 movementVector = transform.position - m_LastPosition;
54
55 float speed = Vector3.Dot( movementVector.normalized, transform.forward );
56 float direction = Vector3.Dot( movementVector.normalized, transform.right );
57
58 if( Mathf.Abs( speed ) < 0.2f )
59 {
60 speed = 0f;
61 }
62
63 if( speed > 0.6f )
64 {
65 speed = 1f;
66 direction = 0f;
67 }
68
69 if( speed >= 0f )
70 {
71 if( Mathf.Abs( direction ) > 0.7f )
72 {
73 speed = 1f;
74 }
75 }
76
77 m_AnimatorSpeed = Mathf.MoveTowards( m_AnimatorSpeed, speed, Time.deltaTime * 5f );
78
79 m_Animator.SetFloat( "Speed", m_AnimatorSpeed );
80 m_Animator.SetFloat( "Direction", direction );
81
82 m_LastPosition = transform.position;
83 }
84
85 void ResetSpeedValues()
86 {
87 m_CurrentMovement = Vector3.zero;
88 m_CurrentTurnSpeed = 0;
89 }
90
91 void ApplySynchronizedValues()
92 {
93 m_TransformView.SetSynchronizedValues( m_CurrentMovement, m_CurrentTurnSpeed );
94 }
95
96 void ApplyGravityToCharacterController()
97 {
98 m_CharacterController.Move( transform.up * Time.deltaTime * -9.81f );
99 }
100
101 void MoveCharacterController()
102 {
103 m_CharacterController.Move( m_CurrentMovement * Time.deltaTime );
104 }
105
106 void UpdateForwardMovement()
107 {
108 if( Input.GetKey( KeyCode.W ) == true )
109 {
110 m_CurrentMovement = transform.forward * ForwardSpeed;
111 }
112 }
113
114 void UpdateBackwardMovement()
115 {
116 if( Input.GetKey( KeyCode.S ) == true )
117 {
118 m_CurrentMovement = -transform.forward * BackwardSpeed;
119 }
120 }
121
122 void UpdateStrafeMovement()
123 {
124 if( Input.GetKey( KeyCode.Q ) == true )
125 {
126 m_CurrentMovement = -transform.right * StrafeSpeed;
127 }
128
129 if( Input.GetKey( KeyCode.E ) == true )
130 {
131 m_CurrentMovement = transform.right * StrafeSpeed;
132 }
133 }
134
135 void UpdateRotateMovement()
136 {
137 if( Input.GetKey( KeyCode.A ) == true )
138 {
139 m_CurrentTurnSpeed = -RotateSpeed;
140 transform.Rotate( 0, -RotateSpeed * Time.deltaTime, 0 );
141 }
142
143 if( Input.GetKey( KeyCode.D ) == true )
144 {
145 m_CurrentTurnSpeed = RotateSpeed;
146 transform.Rotate( 0, RotateSpeed * Time.deltaTime, 0 );
147 }
148 }
149 }
2 using System.Collections;
3
4 [RequireComponent( typeof( CharacterController ) )]
5 public class RPGMovement : MonoBehaviour
6 {
7 public float ForwardSpeed;
8 public float BackwardSpeed;
9 public float StrafeSpeed;
10 public float RotateSpeed;
11
12 CharacterController m_CharacterController;
13 Vector3 m_LastPosition;
14 Animator m_Animator;
15 PhotonView m_PhotonView;
16 PhotonTransformView m_TransformView;
17
18 float m_AnimatorSpeed;
19 Vector3 m_CurrentMovement;
20 float m_CurrentTurnSpeed;
21
22 void Start()
23 {
24 m_CharacterController = GetComponent<CharacterController>();
25 m_Animator = GetComponent<Animator>();
26 m_PhotonView = GetComponent<PhotonView>();
27 m_TransformView = GetComponent<PhotonTransformView>();
28 }
29
30 void Update()
31 {
32 if( m_PhotonView.isMine == true )
33 {
34 ResetSpeedValues();
35
36 UpdateRotateMovement();
37
38 UpdateForwardMovement();
39 UpdateBackwardMovement();
40 UpdateStrafeMovement();
41
42 MoveCharacterController();
43 ApplyGravityToCharacterController();
44
45 ApplySynchronizedValues();
46 }
47
48 UpdateAnimation();
49 }
50
51 void UpdateAnimation()
52 {
53 Vector3 movementVector = transform.position - m_LastPosition;
54
55 float speed = Vector3.Dot( movementVector.normalized, transform.forward );
56 float direction = Vector3.Dot( movementVector.normalized, transform.right );
57
58 if( Mathf.Abs( speed ) < 0.2f )
59 {
60 speed = 0f;
61 }
62
63 if( speed > 0.6f )
64 {
65 speed = 1f;
66 direction = 0f;
67 }
68
69 if( speed >= 0f )
70 {
71 if( Mathf.Abs( direction ) > 0.7f )
72 {
73 speed = 1f;
74 }
75 }
76
77 m_AnimatorSpeed = Mathf.MoveTowards( m_AnimatorSpeed, speed, Time.deltaTime * 5f );
78
79 m_Animator.SetFloat( "Speed", m_AnimatorSpeed );
80 m_Animator.SetFloat( "Direction", direction );
81
82 m_LastPosition = transform.position;
83 }
84
85 void ResetSpeedValues()
86 {
87 m_CurrentMovement = Vector3.zero;
88 m_CurrentTurnSpeed = 0;
89 }
90
91 void ApplySynchronizedValues()
92 {
93 m_TransformView.SetSynchronizedValues( m_CurrentMovement, m_CurrentTurnSpeed );
94 }
95
96 void ApplyGravityToCharacterController()
97 {
98 m_CharacterController.Move( transform.up * Time.deltaTime * -9.81f );
99 }
100
101 void MoveCharacterController()
102 {
103 m_CharacterController.Move( m_CurrentMovement * Time.deltaTime );
104 }
105
106 void UpdateForwardMovement()
107 {
108 if( Input.GetKey( KeyCode.W ) == true )
109 {
110 m_CurrentMovement = transform.forward * ForwardSpeed;
111 }
112 }
113
114 void UpdateBackwardMovement()
115 {
116 if( Input.GetKey( KeyCode.S ) == true )
117 {
118 m_CurrentMovement = -transform.forward * BackwardSpeed;
119 }
120 }
121
122 void UpdateStrafeMovement()
123 {
124 if( Input.GetKey( KeyCode.Q ) == true )
125 {
126 m_CurrentMovement = -transform.right * StrafeSpeed;
127 }
128
129 if( Input.GetKey( KeyCode.E ) == true )
130 {
131 m_CurrentMovement = transform.right * StrafeSpeed;
132 }
133 }
134
135 void UpdateRotateMovement()
136 {
137 if( Input.GetKey( KeyCode.A ) == true )
138 {
139 m_CurrentTurnSpeed = -RotateSpeed;
140 transform.Rotate( 0, -RotateSpeed * Time.deltaTime, 0 );
141 }
142
143 if( Input.GetKey( KeyCode.D ) == true )
144 {
145 m_CurrentTurnSpeed = RotateSpeed;
146 transform.Rotate( 0, RotateSpeed * Time.deltaTime, 0 );
147 }
148 }
149 }